
#include "list_dir.h"

/*获取文本文件属性*/
char *display_file_attribute(struct stat file_info,char *file_name)
{
    char *pFile_mtime_size;         /*函数返回值*/
    off_t file_size;           /*文件的大小 （int）*/
    char size_str[FILE_SIZE_LEN];       /*文件的大小（字符串）*/
    char time_str[FILE_MTIME_LEN];      /*文件最后一次修改的时间*/
    char file_mtime_size[FILE_MTIME_SIZE_LEN]; /*文件最后修改时间和大小的字符串*/

    memset( &file_info,0,sizeof(file_info));   /*将文件信息结构体置 0 */
    lstat( file_name, &file_info );      /*通过文件路径，把文件信息结构体填满*/

    strftime(time_str, sizeof(time_str), "%Y%m%d%H%M%S",localtime(&file_info.st_mtime)); /*将标准时间格式转成本地时间格式*/
    file_size=file_info.st_size;
    sprintf(size_str,"%d",file_size);
    sprintf(file_mtime_size,"%s*%s",size_str,time_str);
    pFile_mtime_size=file_mtime_size;
    return pFile_mtime_size;
}

/*判断文件是否是个目录文件，是目录返回 1 ，不是目录返回 0*/
int testdir(char *path)
{
    struct stat buf;
    if(lstat(path,&buf)<0)
    {
        return 0;
    }
    if(S_ISDIR(buf.st_mode))
    {
        return 1; //directory
    }
    return 0;
}

/*遍历目录*/
int directory(char *path)
{
    DIR *db;              /*保存 打开目录类型文件信息的 结构体*/
    char filename[FILE_NAME];        /*文件名*/
    char file_size_mtime[FILE_MTIME_SIZE_LEN]; /*文件大小和最后修改时间的字符串*/
    char file_attribute[FILE_ATTRIBUTE];    /*文件完整属性的字符串*/
    struct stat file_info;         /*保存 普通文件的属性信息的 结构体*/
    struct dirent *dir_info;        /*保存 目录类型文件属性信息的 结构体*/

    db=opendir(path);
    if(db==NULL){
        printf("Open dir error !\n");
        return 0;
    }
    memset(filename,0,FILE_NAME);
    memset(file_size_mtime,0,FILE_MTIME_SIZE_LEN);
    memset(file_attribute,0,200);

    while ((dir_info=readdir(db)))
    {
        if((strcmp(dir_info->d_name,".")==0)||(strcmp(dir_info->d_name,"..")==0))
            continue;
        else
        {
            sprintf(filename,"%s/%s",path,dir_info->d_name);
            if(!testdir(filename))
            {
              //  memcpy(file_size_mtime,display_file_attribute(file_info,filename),FILE_MTIME_SIZE_LEN);
                printf("%s\n",dir_info->d_name);    
            }
        }
        memset(filename,0,64);
    }
    closedir(db);
    return 0;
}
int main(int argc,char **argv)
{
    char *path=argv[1];
    if(access(path,F_OK)==0&&testdir(path))
    {
        directory(path);
    }
    else printf("%s not exist\n",path);
}
